/**
 * Description:
 * Class Name:MapTest2
 * Date:2022/3/6 13:41
 *
 * @author LTisme
 * @version JAVA17
 */
package 疯狂Java讲义.第8章_Java集合._8_6_增强的Map集合._8_6_1_Java8为Map新增的方法;

import java.util.HashMap;

public class MapTest2 {
    public static void main(String[] args) {
        var map = new HashMap();
        // 成对放入多个key-value对
        map.put("疯狂Java讲义", 109);
        map.put("疯狂IOS讲义", 99);
        map.put("疯狂Android讲义", 79);
        // 尝试替换key为"疯狂XML讲义"的value，由于原Map中没有对应的key，因此没有任何改变发生
        map.replace("疯狂XML讲义", 66);
        System.out.println(map);

        // 使用原value与传入参数计算出来的结果覆盖原有的value
        map.merge("疯狂IOS讲义", 10, (oldVal, param) -> (Integer) oldVal + (Integer) param);
        System.out.println(map);            // "疯狂IOS讲义" 的数值量增大了10

        // 当key为"Java"对应的value为null（或不存在时），使用计算的结果作为新value
        map.computeIfAbsent("Java", key -> ((String) key).length());
        System.out.println(map);            // 会在Map中添加了Java==4这组新key-value对
        // 当key为"Java"对应的value存在时，使用计算的结果作为新value
        map.computeIfPresent("Java", (key, value) -> (Integer) value * (Integer) value);
        System.out.println(map);            // map中Java == 4 变成了 Java== 16
    }
}
//{疯狂IOS讲义=99, 疯狂Android讲义=79, 疯狂Java讲义=109}
//{疯狂IOS讲义=109, 疯狂Android讲义=79, 疯狂Java讲义=109}
//{Java=4, 疯狂IOS讲义=109, 疯狂Android讲义=79, 疯狂Java讲义=109}
//{Java=16, 疯狂IOS讲义=109, 疯狂Android讲义=79, 疯狂Java讲义=109}